﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PharmacyBussinesEntities;

namespace PharmacyRepositoy.Mapping
{
    public class ProductoMap:EntityTypeConfiguration<Producto>
    {
        public ProductoMap()
        {
            this.HasKey(p => p.Id);

            this.Property(p => p.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            this.Property(p => p.Nombre)
                .HasMaxLength(100)
                .IsRequired();

            this.Property(p => p.Descripcion)
                .IsOptional()
                .HasMaxLength(150);

            this.Property(p => p.NumeroUnidadMedida)
                .IsRequired()
                .HasPrecision(9, 2);




            this.Property(p => p.PrincipioActivo)
                .HasMaxLength(150)
                .IsRequired();



            this.Property(p => p.Stock)
                .HasPrecision(9, 2)
                .IsOptional();

            this.Property(p => p.StockMaximo)
                .HasPrecision(9,2)
                .IsOptional();

            this.Property(p => p.StockMinimo)
                .HasPrecision(9, 2)
                .IsOptional();

            this.ToTable("PRODUCTO");

            this.Property(p => p.Nombre).HasColumnName("Nombre");
            this.Property(p => p.Descripcion).HasColumnName("Descripcion");

           // this.Property(p => p.Lote).HasColumnName("Lote");
            this.Property(p => p.PrincipioActivo).HasColumnName("PrincipioActivo");

            this.Property(p => p.Stock).HasColumnName("Stock");
            this.Property(p => p.StockMaximo).HasColumnName("StockMaximo");
            this.Property(p => p.StockMinimo).HasColumnName("StockMinimo");

            this.HasRequired(p=>p.Categoria)
                .WithMany()
                .HasForeignKey(p=>p.IdCategoria)
                .WillCascadeOnDelete();

            this.HasRequired(p => p.Laboratorio)
                .WithMany()
                .HasForeignKey(p => p.IdLaboratorio)
                .WillCascadeOnDelete();

            this.HasRequired(p => p.UnidadMedida)
                .WithMany()
                .HasForeignKey(p => p.IdUnidadMedida)
                .WillCascadeOnDelete();

            this.HasRequired(p => p.Presentacion)
                .WithMany()
                .HasForeignKey(p => p.IdPresentacion)
                .WillCascadeOnDelete();

   }
    }
}
